export default {
    // 必选
    requiredSelect: (mes = "此项必选", trigger = ["blur", "change"]) => {
        return {
            required: true,
            message: mes,
            trigger: trigger
        }
    },
    // 固定长度
    $length: (len = 1, message = `长度必须为${len}`, trigger = ["blur", "change"]) => {
        return {
            len: len,
            message: message,
            trigger: trigger
        }
    },
    // 长度验证
    len: (min = 1, max = 255, message = `长度为${min}-${max}`, trigger = ["blur", "change"]) => {
        return {
            min: min,
            max: max,
            message: message,
            trigger: trigger
        }
    },
    // 最小长度
    min: (min = 1, message = `最小长度为${min}`, trigger = ["blur", "change"]) => {
        return {
            min: min,
            message: message,
            trigger: trigger
        }
    },
    // 最大长度
    max: (max = 255, message = `最大长度为${max}`, trigger = ["blur", "change"]) => {
        return {
            max: max,
            message: message,
            trigger: trigger
        }
    },
    // 最小数
    minNum: (min = 1, type = "number", message = `不能小于${min}`, trigger = ["blur", "change"]) => {
        return {
            type: type,
            min: min,
            message: message,
            trigger: trigger
        }
    },
    // 最大数
    maxNum: (max = 255, type = "number", message = `不能大于${max}`, trigger = ["blur", "change"]) => {
        return {
            type: type,
            max: max,
            message: message,
            trigger: trigger
        }
    },
    // 数值范围
    rangeNum: (min = 1, max = 255, message = `只能输入${min}-${max}之间的数`, trigger = ["blur", "change"]) => {
        const validator = (rule, value, callback) => {
            if (value === "" || (Number(value) >= min && Number(value) <= max)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 类型
    type: (type = "string", message = `输入的类型必须为${type}`, trigger = ["blur", "change"]) => {
        return {
            type: type,
            message: message,
            trigger: trigger
        }
    },

    password: (callback) => {
        return {
            validator: callback,
            trigger: "change"
        }
    },
    // 邮箱
    email: (message = "请输入正确的邮箱地址", trigger = ["blur", "change"]) => {
        // eslint-disable-next-line no-useless-escape
        const reg = /^[a-zA-Z0-9][a-zA-Z0-9 . _-]+(@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+)$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 大写字母
    upperCase: (message = "请输入大写字母", trigger = ["blur", "change"]) => {
        const reg = /^[A-Z]+$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 小写字母
    lowerCase: (message = "请输入小写字母", trigger = ["blur", "change"]) => {
        const reg = /^[A-Z]+$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 大小写字母
    english: (message = "请输入英文", trigger = ["blur", "change"]) => {
        const reg = /^[A-Za-z]+$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 只能输中文
    chinese: (message = "请输入中文", trigger = ["blur", "change"]) => {
        const reg = /^[\u4e00-\u9fa5]+$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 不能输中文
    noChinese: (message = "不能包含中文", trigger = ["blur", "change"]) => {
        const validator = (rule, value, callback) => {
            if (value === "" || escape(value).indexOf("%u") >= 0) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 中文英文数字
    cnEnNum: (message = "请输入中文、大小写英文、数字", trigger = ["blur", "change"]) => {
        const reg = /^[\u4e00-\u9fa5|A-Za-z0-9]+$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 路径
    path: (message = "请输入英文、数字、划线、斜线", trigger = ["blur", "change"]) => {
        const reg = /^[-|_|/|A-Za-z0-9]+$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 英文数字下划线
    enNumLine: (message = "请输入英文、数字、下划线", trigger = ["blur", "change"]) => {
        const reg = /^[_|A-Za-z0-9]+$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 英文数字
    enNum: (message = "请输入英文、数字", trigger = ["blur", "change"]) => {
        const reg = /^[A-Za-z0-9]+$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 必须包含英文数字
    haveCnEnNum: (message = "必须包含英文和数字", trigger = ["blur", "change"]) => {
        const reg = /^(?=.*[a-zA-Z]+)(?=.*[0-9]+)[a-zA-Z0-9]+$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 手机号
    mobile: (message = "请输入正确的手机号码", trigger = ["blur", "change"]) => { // 手机号码验证
        const reg = /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(16[2|6|7])|(18[0-9])|(17([0-1]|[3]|[5-8]))|(19[1|8|9]))\d{8}$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 座机
    phone: (message = "请输入正确的座机号码", trigger = ["blur", "change"]) => {
        const reg = /^((\d{3,4}-\d{7,8})|(\d{7}-\d{1,12})|(\d{8}-\d{1,11})|(\d{11}-\d{1,8})|(\d{7,8})|(\d{11,20})|(\d{3}-\d{8}-\d{1,7})|(\d{3}-\d{7}-\d{1,8})|(\d{4}-\d{7}-\d{1,7})|(\d{4}-\d{8}-\d{1,6}))$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 手机或座机
    phoneAll: (message = "请输入正确的电话号码", trigger = ["blur", "change"]) => {
        const reg = /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(16[2|6|7])|(18[0-9])|(17([0-1]|[3]|[5-8]))|(19[1|8|9]))\d{8}$|^((\d{3,4}-\d{7,8})|(\d{7}-\d{1,12})|(\d{8}-\d{1,11})|(\d{11}-\d{1,8})|(\d{7,8})|(\d{11,20})|(\d{3}-\d{8}-\d{1,7})|(\d{3}-\d{7}-\d{1,8})|(\d{4}-\d{7}-\d{1,7})|(\d{4}-\d{8}-\d{1,6}))$/
        const validator = (rule, value, callback) => {
            if (value === "" || reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator,
            trigger
        }
    },
    // 小数
    float: (message = "请输入合法的数字", trigger = ["blur", "change"]) => {
        const reg = /^[0-9]+([.]{1}[0-9]+){0,1}$/
        const va = (rule, value, callback) => {
            if (value === null || value === "") {
                callback()
            }
            if (reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator: va,
            trigger: trigger
        }
    },
    // 两位小数
    decimal: (message = "请输入最多两位小数", trigger = ["blur", "change"]) => {
        const reg = /^(([0-9]*)|(([0]\.\d{1,2}|[0-9]*\.\d{1,2})))$/
        const va = (rule, value, callback) => {
            if (value === null || value === "") {
                callback()
            }
            if (reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator: va,
            trigger: trigger
        }
    },
    // 整数
    number: (message = "请输入合法的数字", trigger = ["blur", "change"]) => {
        const reg = /^[0-9]\d*$/
        const va = (rule, value, callback) => {
            if (value === "") {
                callback()
            } else if (reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator: va,
            trigger: trigger
        }
    },
    // 正数
    plusNumber: (message = "请输入合法的数字", trigger = ["blur", "change"]) => {
        const reg = /^(0|[1-9][0-9]*)(\.\d+)?$/
        const va = (rule, value, callback) => {
            if (value === "") {
                callback()
            } else if (reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator: va,
            trigger: trigger
        }
    },
    // 大于0的正数
    moreThanZeroNumber: (message = "只能输入大于0的整数", trigger = ["blur", "change"]) => {
        const reg = /^\+?[1-9]\d*$/
        const va = (rule, value, callback) => {
            if (value === "") {
                callback()
            } else if (reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator: va,
            trigger: trigger
        }
    },
    // 网址
    url: (message = "请输入正确的网址", trigger = ["blur", "change"]) => {
        const reg = /^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*$/
        const va = (rule, value, callback) => {
            if (value === "") {
                callback()
            }
            if (reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator: va,
            trigger: trigger
        }
    },
    // ip地址
    ip: (message = "请输入正确的ip", trigger = ["blur", "change"]) => {
        const reg = /^(?=(\b|\D))(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))(?=(\b|\D))*$/
        const va = (rule, value, callback) => {
            if (value === "") {
                callback()
            }
            if (reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator: va,
            trigger: trigger
        }
    },
    // 身份证号
    identity: (message = "请输入正确的身份证号", trigger = ["blur", "change"]) => {
        const reg = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/
            // ^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$
        const va = (rule, value, callback) => {
            if (value === "") {
                callback()
            }
            if (reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator: va,
            trigger: trigger
        }
    },
    // 邮政编码
    postal: (message = "请输入正确的邮政编码", trigger = ["blur", "change"]) => {
        const reg = /^\d{6}$/
        const va = (rule, value, callback) => {
            if (value === "") {
                callback()
            }
            if (reg.test(value)) {
                callback()
            } else {
                callback(new Error(message))
            }
        }
        return {
            validator: va,
            trigger: trigger
        }
    }
}